/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Ventanas;

import Offline.Deshacer;
import Offline.Usuario;
import Online.Inicio;
import Online.Opciones;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;

/**
 * @author Alvaro Garcia Tapia
 * @author Pablo Mosquera Diaz
 * @author Victor Navarro Ortego
 * @author Adrian Neila Serrano
 * @author Daniel Sanchez Suarez
 * 
 * @proyecto Gestor de Tareas Online
 * @version 1.2
 */
public class VentanaNuevoUser extends JFrameConFondo implements ActionListener {
    
        //Creación de variables
	private JButton botonAceptar;
	private JButton botonAtras;
	private JButton botonCancelar;	
        private JLabel labelName;
        private JTextField Name;
	private String name;
        private JLabel labelPass;
	private JPasswordField Pass;
        private JLabel labelConfirmar;
	private JPasswordField Confirmar;
        private JLabel labelPregunta;
        private JTextField Pregunta;
	private String pregunta;	
        private JLabel labelRespuesta;
        private JTextField Respuesta;
	private String respuesta;
	private String nombre;
	private String apellidos;
	private String email;
	private String pais;
	private String ciudad;
        private Inicio inicio;
        private boolean online;
        private Usuario usuario;
        private int x;
        private int y;
    
    public VentanaNuevoUser(String name,String pregunta,String respuesta,String nombre,String apellidos,
                            String email,String pais,String ciudad, boolean online){
     //constructor JFrame
		super("Gestor de Tareas Online"); 
                //Inicialización de user y pass
		this.name = name;
                this.pregunta = pregunta;
                this.respuesta = respuesta;
                this.nombre = nombre;
                this.apellidos = apellidos;
                this.email = email;
                this.pais = pais;
                this.ciudad = ciudad;
                this.online = online;
                
                //Dimensiones de la pantalla
                Dimension dim=super.getToolkit().getScreenSize(); 
                x = (int)dim.width;
                y = (int)dim.height;
                
                
                //Opciones de ventana
                this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
                //se añade la opción de preguntar antes de salir
                addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent evt) {
                        close();
                    }
                });
		setLayout(null);
		setSize(350,350);
                setExtendedState(MAXIMIZED_BOTH);
		Container contenidoPanel = getContentPane();
		contenidoPanel.setBackground(Color.LIGHT_GRAY);
                setImagen("objetos/fondo.jpg");
                setIconImage(new ImageIcon(getClass().getResource("objetos/icono.png")).getImage()); 
                
                
                
                
                
                //Cuadrante de introducción de nombre
		labelName = new JLabel("Nombre de Usuario:");
		labelName.setBounds((int)(x*0.3),(int)(y*0.1),275,15);
                labelName.setForeground(Color.white);
                labelName.setFont(new java.awt.Font("Arial", 1, 16)); 
		getContentPane().add(labelName);
		this.Name = new JTextField();
                this.Name.setText(this.name);
		this.Name.setBounds((int)(x*0.3),(int)(y*0.125),200,25);
                this.Name.setFont(new java.awt.Font("Arial", 0, 16)); 
                this.Name.setActionCommand("Aceptar");
		this.Name.addActionListener(this);
		getContentPane().add(this.Name);
		
                //Cuadrante de introducción de pass
		labelPass = new JLabel("Contraseña:");
		labelPass.setBounds((int)(x*0.3),(int)(y*0.175),275,15);
                labelPass.setForeground(Color.white);
                labelPass.setFont(new java.awt.Font("Arial", 1, 16)); 
		getContentPane().add(labelPass);
		this.Pass = new JPasswordField();
		this.Pass.setBounds((int)(x*0.3),(int)(y*0.2),275,25);
                this.Pass.setFont(new java.awt.Font("Arial", 0, 16)); 
                this.Pass.setActionCommand("Aceptar");
		this.Pass.addActionListener(this);
		getContentPane().add(this.Pass);
		
                //Cuadrante de confirmacion de pass
		labelConfirmar = new JLabel("Confirmar Contraseña:");
		labelConfirmar.setBounds((int)(x*0.57),(int)(y*0.175),275,15);
                labelConfirmar.setForeground(Color.white);
                labelConfirmar.setFont(new java.awt.Font("Arial", 1, 16)); 
		getContentPane().add(labelConfirmar);
		this.Confirmar = new JPasswordField();
		this.Confirmar.setBounds((int)(x*0.57),(int)(y*0.2),275,25);
                this.Confirmar.setFont(new java.awt.Font("Arial", 0, 16)); 
                this.Confirmar.setActionCommand("Aceptar");
		this.Confirmar.addActionListener(this);
		getContentPane().add(this.Confirmar);
		
                //Cuadrante de introducción de pregunta
		labelPregunta = new JLabel("Pregunta de seguridad:");
		labelPregunta.setBounds((int)(x*0.3),(int)(y*0.25),600,15);
                labelPregunta.setForeground(Color.white);
                labelPregunta.setFont(new java.awt.Font("Arial", 1, 16)); 
		getContentPane().add(labelPregunta);
		this.Pregunta = new JTextField();
                this.Pregunta.setText(this.pregunta);
		this.Pregunta.setBounds((int)(x*0.3),(int)(y*0.275),600,25);
                this.Pregunta.setFont(new java.awt.Font("Arial", 0, 16)); 
                this.Pregunta.setActionCommand("Aceptar");
		this.Pregunta.addActionListener(this);
		getContentPane().add(this.Pregunta);
		
                //Cuadrante de introducción de respuesta
		labelRespuesta = new JLabel("Respuesta de seguridad:");
		labelRespuesta.setBounds((int)(x*0.3),(int)(y*0.325),600,15);
                labelRespuesta.setForeground(Color.white);
                labelRespuesta.setFont(new java.awt.Font("Arial", 1, 16)); 
		getContentPane().add(labelRespuesta);
		this.Respuesta = new JTextField();
                this.Respuesta.setText(this.respuesta);
		this.Respuesta.setBounds((int)(x*0.3),(int)(y*0.35),600,25);
                this.Respuesta.setFont(new java.awt.Font("Arial", 0, 16)); 
                this.Respuesta.setActionCommand("Aceptar");
		this.Respuesta.addActionListener(this);
		getContentPane().add(this.Respuesta);
		
                //Constucción del boton Aceptar
		botonAceptar = new JButton("Aceptar"); 
		botonAceptar.setBounds((int)(x*0.65),(int)(y*0.45),150,30);
                botonAceptar.setFont(new java.awt.Font("Arial", 1, 16)); 
                botonAceptar.setActionCommand("Aceptar");
		botonAceptar.addActionListener(this);
                botonAceptar.setIcon(new ImageIcon(getClass().getResource("objetos/Aceptar Nuevo Usuario.jpg")));
		this.add(botonAceptar);
                		
                //Constucción del boton Cancelar
		botonAtras = new JButton("Atras"); 
		botonAtras.setBounds((int)(x*0.475),(int)(y*0.45),150,30);
                botonAtras.setFont(new java.awt.Font("Arial", 1, 16)); 
                botonAtras.setActionCommand("Atras");
		botonAtras.addActionListener(this);
                botonAtras.setIcon(new ImageIcon(getClass().getResource("objetos/Atras Nuevo Usuario.jpg")));
		this.add(botonAtras);
                		
                //Constucción del boton Cancelar
		botonCancelar = new JButton("Cancelar"); 
		botonCancelar.setBounds((int)(x*0.3),(int)(y*0.45),150,30);
                botonCancelar.setFont(new java.awt.Font("Arial", 1, 16)); 
                botonCancelar.setActionCommand("Cancelar");
		botonCancelar.addActionListener(this);
                botonCancelar.setIcon(new ImageIcon(getClass().getResource("objetos/Cancelar Nuevo Usuario.jpg")));
		this.add(botonCancelar);
                

                
                
                setVisible(true);
    }
    
    
    /**
     * Metodo para conectar las opciones con la bbdd
     * @return La conexión con la bbdd
     */
    private Opciones conectarOpciones(){
        //Se crea el objeto para actuar contra la bbdd
        Opciones opciones = new Opciones();
        boolean salir = false;
        //Si no se ha conectado
        while (!opciones.estado() && !salir){
            this.setCursor(Cursor.WAIT_CURSOR);
            String message = "Fallo al conectar con el servidor.\n¿Desea volver a intentar conectar?";
            String title = "Error de conexión";
            //Se ofrece la opcion de reconectar
            int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
            this.setCursor(Cursor.DEFAULT_CURSOR);
            //Si rechazo reconectar
            if (reply == JOptionPane.NO_OPTION){     
                this.setCursor(Cursor.WAIT_CURSOR);
                salir=true;
                new VentanaInicio();
                //Se cierra la ventana de login
                setVisible(false);
                setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
                this.setCursor(Cursor.DEFAULT_CURSOR);
            }
            //Si se acepto reconectar
            else{
                this.setCursor(Cursor.WAIT_CURSOR);
                //Se reconecta
                opciones = new Opciones();
                this.setCursor(Cursor.DEFAULT_CURSOR);
            }    
        }
        return opciones;
    }
    
        /**
         * Función que se encarga de cerrar el programa
         */
        public void close(){
                this.setCursor(Cursor.WAIT_CURSOR);
                //Si se pulso el boton Logout
                String message = "¿Está seguro de que quiere salir?";
                String title = "Logout";
                //Se da la opcion de cerrar o no
                int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                this.setCursor(Cursor.DEFAULT_CURSOR);
                //Si se decide cerrar
                if (reply == JOptionPane.YES_OPTION)
                {     
                    this.setCursor(Cursor.WAIT_CURSOR);
                    //Aviso de desconexion
                    new AvisoDesconexion();
                    //Cierre del programa
                    System.exit(0);
                    this.setCursor(Cursor.DEFAULT_CURSOR);
                }
        }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Variable que indica que boton se ha pulsado
        String comando = e.getActionCommand();
        this.setCursor(Cursor.WAIT_CURSOR);
        if(comando.equals("Aceptar")){
            if (!this.Name.getText().equals("") && !this.Pass.getText().equals("") &&
                !this.Confirmar.getText().equals("") && !this.Pregunta.getText().equals("") &&
                !this.Respuesta.getText().equals("")){
                inicio = new Inicio();
                
                boolean LoginCorrecto = false;
                boolean noconectar = false;
                //Si fallo la conexión
                while (!inicio.estado() && !noconectar){
                    this.setCursor(Cursor.WAIT_CURSOR);
                    //Si se pulso el boton Logout
                    String message = "Fallo al conectar con el servidor.\n¿Desea volver a intentar conectar?";
                    String title = "Error de conexión";
                    //Se ofrece la posibilidad de volver a conectar
                    int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                    this.setCursor(Cursor.DEFAULT_CURSOR);
                    //Si no se quiere volver a conectar se cierra el programa
                    if (reply == JOptionPane.NO_OPTION){     
                        this.setCursor(Cursor.WAIT_CURSOR);
                        noconectar = true;
                        //System.exit(0);
                        new VentanaInicio();
                        //Se cierra la ventana de login
                        setVisible(false);
                        setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
                        this.setCursor(Cursor.DEFAULT_CURSOR);
                    }
                    //Si se dijo que si, se vuelve a intentar la conexion
                    else{
                        inicio = new Inicio();
                    }
                
                }
                if (Pass.getText().equals(Confirmar.getText())){
                    //Se comprueba el user y pass
                    if(inicio.NewUser(Name.getText(), Pass.getText(),nombre,apellidos,email,pais,ciudad,
                            Pregunta.getText(),Respuesta.getText()))
                        LoginCorrecto = inicio.Login(Name.getText(), Pass.getText());
                    //Si login correcto se avisa de ello
                    if (LoginCorrecto){
                        JOptionPane.showMessageDialog (null,"Conectado.",
                              "Conectado", JOptionPane.INFORMATION_MESSAGE);
                        //Se genera la ventana donde se mostrara la lista
                        new Ventana(Name.getText(),"Lista Principal", 10,0,
                                    online,usuario,new ArrayList<Deshacer>());
                        Opciones opciones = conectarOpciones();
                        opciones.setOpcion(name, 10, 10, "Lista Principal");
                        //Se cierra la ventana de nuevo usuario
                        setVisible(false);
                        setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
                    }
                    //Si login incorrecto se avisa que el user o pass son incorrectos
                    else
                        JOptionPane.showMessageDialog (null,"El nombre de usuario ya está en uso.",
				"Fallo al conectar", JOptionPane.INFORMATION_MESSAGE);
                }
                else{
                    Pass.setText("");
                    Confirmar.setText("");
                    JOptionPane.showMessageDialog (null,"Por favor, verifique que la contraseña es correcta.",
                        "Contraseña Incorrecta", JOptionPane.INFORMATION_MESSAGE);
                }
            }
            else
		JOptionPane.showMessageDialog (null,"Debe rellenar todos los campos.",
				"Atención", JOptionPane.INFORMATION_MESSAGE);
        }
        
        //Si se ha pulsado Atras
        else if(comando.equals("Atras")){     
            new VentanaDatosUser(Name.getText(),Pregunta.getText(),Respuesta.getText(),nombre,apellidos,email,pais,ciudad);
            setVisible(false);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
        
        //Si se ha pulsado cancelar
        else if(comando.equals("Cancelar")){
            new VentanaInicio();
            setVisible(false);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
        this.setCursor(Cursor.DEFAULT_CURSOR);
    }
    
    
}
